14840
18374
이 질문에 이미 답변이 있습니다.
Express JS-리디렉션 할 수 없음
(4 답변)
7 년 전에 문을 닫았습니다.
아래 미들웨어와 함께 passportjs를 사용하고 있습니다. 사용자가 특정 사항을 요청할 때 로그인 여부를 확인한다고 가정합니다. 로그인하지 않은 경우 로그인 페이지로 리디렉션되어야합니다.
다음과 같은 요청 경로가 있습니다.
app.put ( '/ fantasyteams / : fantasyTeamId', auth.requiresLogin, fantasyteams.update);
이 경로는 사용자가 웹 사이트에서 Fantasy Team이라는 리소스를 업데이트하려고 할 때 호출됩니다.
auth.requiresLogin은 다음과 같은 미들웨어입니다.
exports.requiresLogin = function (req, res, next) {
if (req.isAuthenticated ()) {
next () 반환
}
return res.redirect ( "/ signin");
};
사용자 로그인 후 세션 쿠키를 삭제하여 세션 만료를 시뮬레이션했습니다. 그 후 웹 사이트를 통해 판타지 팀 번호 123을 업데이트 해 달라는 PUT '/ fantasyteams / 123'요청을했습니다.
fantasyteams.update는 단순히 mongodb / mongoose 저장 작업입니다.
exports.update = function (req, res) {
var fantasyteam = req.fantasyteam;
fantasyteam = _.extend (fantasyteam, req.body);
fantasyteam.save (function (err) {
res.jsonp (fantasyteam);
});
};
예상대로 위의 라우트 핸들러 (app.put ...)가 요청을 포착하여 auth.requiresLogin 미들웨어에 전달하여 사용자가 로그인했는지 확인합니다. 그래서 삭제했기 때문에 사용자가 로그인되지 않은 것으로 나타났습니다. 그의 세션 쿠키. res.redirect가 예상대로 호출됩니다. 그러나 웹 사이트는 로그인 페이지로 리디렉션되지 않습니다. node.js 명령 로그에 다음이 표시됩니다.
PUT / 로그인 404328ms
내가 뭘 잘못 했어? 
문제는 PUT / signin에 대한 경로 처리기가 없다는 것입니다. 원래 요청은 넣기 였으므로 리디렉션 될 때 여전히 브라우저의 동일한 'put'요청의 일부입니다. app.all ( '/ signin')을 사용하여 put / post / whatever에 대한 핸들러를 추가하십시오.
삼
|
찾고있는 답변이 아닙니까? node.js 세션 쿠키 익스프레스 passport.js 태그가있는 다른 질문을 찾아 보거나 직접 질문하십시오.